package com.example.igela;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter {
	
	// Datu basearen izena
	public static final String DATABASE_NAME= "dbIgelaJokoa"; 
	public static final int DATABASE_VERSION= 1; 
	
	//Taulak
	public static final String TABLE_ERABILTZAILEAK= "ERABILTZAILEAK"; 
	
	//Taulen zutabeak 
	public static final String ERABILTZAILE_ID="ID";
	public static final String ERABILTZAILE_IZENA= "IZENA";
	public static final String ERABILTZAILE_PASAHITZA= "PASAHITZA";
	 
	//Aplikazioaren kontextua
	private Context contexto;
	
	//Klase laguntzailea
	private DatabaseHelper DBHelper;
	
	//Datu basearekin konexioa
	private SQLiteDatabase db; 
	
	//ERABILTZAILEAK datu baseari sarrera ahalbidetzen duen barne klasea
	private class DatabaseHelper extends SQLiteOpenHelper { 
		public DatabaseHelper( Context _context ) { 
			super( _context, DATABASE_NAME, null, DATABASE_VERSION); 
	  } 
	
	@Override
	public void onCreate(SQLiteDatabase bd) {
		
		//ERABILTZAILEAK taula sortzen duen sql sententzia
		String sql = "CREATE TABLE [ERABILTZAILEAK] "
		  		+ "([ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
		  		+ "[IZENA] TEXT NOT NULL,"
		  		+ "[PASAHITZA] INTEGER NOT NULL)"; 
		
	   bd.execSQL(sql);
	  } 
	@Override
	public void onUpgrade(SQLiteDatabase bd, int oldVersion, int newVersion) {} 
	 }
	
	//Eraikitzailea
	public DBAdapter(Context _contexto) { 
		this.contexto= _contexto; 
		this.DBHelper= new DatabaseHelper( _contexto); 
	 } 
	
	//Datu basea zabaltzen duen metodoa
	public void open() throws SQLException { 
		db= this.DBHelper.getWritableDatabase(); 
	 } 
	
	// Datu basea ixten duen metodoa
	public void close() { 
		this.DBHelper.close(); 
	} 

	//Metodo honek erregistratutako erabiltzaileak bueltatuko ditu matrize batean edo null erabiltzaileak ez badaude (taula hutsik badago)
	public Erabiltzailea[] erakutsi()throws SQLException { 
		Erabiltzailea[] datuak = null; 
		String[] zutabeak = {ERABILTZAILE_ID,ERABILTZAILE_IZENA, ERABILTZAILE_PASAHITZA}; 
		Cursor cursor = db.query(TABLE_ERABILTZAILEAK, zutabeak, null, null, null, null, null); 
	
		if(cursor.getCount() > 0 ){ 
			datuak = new Erabiltzailea[ cursor.getCount()]; 
			for( int nreg = 0; nreg < cursor.getCount(); nreg++) { 
			    cursor.moveToNext(); 
			    datuak[nreg] = new Erabiltzailea();
			    datuak[nreg].setId(cursor.getInt(cursor.getColumnIndex(ERABILTZAILE_ID))); 
			    datuak[nreg].setIzena(cursor.getString(cursor.getColumnIndex(ERABILTZAILE_IZENA))); 
			    datuak[nreg].setPasahitza(cursor.getString(cursor.getColumnIndex(ERABILTZAILE_PASAHITZA))); 
			    
			} 
	  } 
	  cursor.close(); 
	  
	  return datuak; 
	} 
	//Taulan datuak txertatuko dituen metodoa
	public long txertatu(Erabiltzailea _erabil ) throws SQLException { 
		  
		  ContentValues balioak = new ContentValues(); 
		  
		  balioak.put(ERABILTZAILE_IZENA, _erabil.getIzena()); 
		  balioak.put(ERABILTZAILE_PASAHITZA, _erabil.getPasahitza()); 
 
		  return db.insert(TABLE_ERABILTZAILEAK, null, balioak); 
	}
	
	//Erabiltzaile bat lortuko da, posta begiratuta. Datu basean existitzen bada null bueltatuko da. 
	public Erabiltzailea getErabiltzaile(String _izena ) throws SQLException { 
				Erabiltzailea _erabil = null; 
				String[] zutabeak = { ERABILTZAILE_ID,ERABILTZAILE_IZENA, ERABILTZAILE_PASAHITZA}; 
				String condicion = ERABILTZAILE_IZENA+ " = ? "; 
				//String[] argsCondicion = { String.valueOf(id) };
				String[] argsCondicion = { _izena };
				Cursor cursor = db.query(TABLE_ERABILTZAILEAK, zutabeak, condicion, argsCondicion,null, null, null); 
				if( cursor.getCount() > 0 ){ 
				   cursor.moveToNext(); 
				   _erabil= new Erabiltzailea(); 
				   _erabil.setId(cursor.getInt(cursor.getColumnIndex(ERABILTZAILE_ID))); 
				   _erabil.setIzena(cursor.getString(cursor.getColumnIndex(ERABILTZAILE_IZENA)));  
				   _erabil.setPasahitza(cursor.getString(cursor.getColumnIndex(ERABILTZAILE_PASAHITZA))); 
	
				} 
			  cursor.close(); 
			  return _erabil;   
	}
	
	//Metodo honekin erabiltzailea datu basean badagoen edo ez begiratuko da. Erabiltzailea datu basean badago, hurrengo pantailara pasatuko da (identifikatu).
	// Erabiltzailea ez badago, false bueltatuko da. 
	public boolean erabiltzaileaIdentifikatu(String _posta, String _pasahitza){
		
		String[] columnas = {ERABILTZAILE_ID,ERABILTZAILE_IZENA, ERABILTZAILE_PASAHITZA};
		String condicion = ERABILTZAILE_IZENA+ " = ? AND " + ERABILTZAILE_PASAHITZA + "=?" ; 
		String[] argsCondicion = {_posta,_pasahitza}; 
		Cursor cursor = db.query(TABLE_ERABILTZAILEAK, columnas,condicion, argsCondicion,null, null, null); 
		
		return cursor.getCount() > 0; 
	}
	
	//Metodo honekin erabiltzaile bat ezabatuko da datu basetik
	public boolean erabiltzaileaEzabatu(Erabiltzailea _erabil) throws SQLException { 
		
		String condicion = ERABILTZAILE_IZENA+ " = ? AND " + ERABILTZAILE_PASAHITZA + "=?" ; 
		String[] argsCondicion = {_erabil.getIzena(),_erabil.getPasahitza()};
	//	Log.d("APP", "RESUL: "+db.delete(TABLE_ERABILTZAILEAK, condicion, null));
		return db.delete(TABLE_ERABILTZAILEAK, condicion, argsCondicion) > 0;  
	}
	
}
